package com.dragon.modules.yuegou.service.system;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dragon.common.web.PageRequest;
import com.dragon.modules.yuegou.entity.system.UserEntity;
import com.dragon.modules.yuegou.enums.OwnerType;
import com.dragon.modules.yuegou.model.system.User;
import com.dragon.modules.yuegou.query.system.AccountQuery;

import javax.annotation.Nullable;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 系统用户表--- 这块包含登录大运营平台、集团版本、悦商惠版本等除C端会员的所有用户集合 服务接口
 *
 * @author pbuilder generated
 * @date 2019-03-19 08:59:41
 * @version 2.0
 */
public interface UserService extends IService<UserEntity> {

	Map<String, User> getByIds(Collection<String> ids);

	void bindCreator(User entity);

	/**
	 * 获取用户分页列表
	 */
	IPage<User> search(PageRequest page, AccountQuery query);

	/**
	 * 获取集团用户分页列表
	 */
	IPage<User> searchGroup(PageRequest page, AccountQuery query);

	/**
	 * 创建账号
	 * 
	 * @param username
	 *            用户名
	 * @param mobile
	 *            手机号
	 * @param nickname
	 *            昵称（姓名）
	 * @param password
	 *            密码
	 * @return 用户对象
	 */
	User createAccount(String username, @Nullable String mobile, @Nullable String nickname, String password);

	/**
	 * 更改密码（使用旧密码验证）
	 * 
	 * @param userId
	 *            用户ID
	 * @param oldPwd
	 *            旧密码
	 * @param newPwd
	 *            新密码
	 */
	void changePwd(String userId, String oldPwd, String newPwd, OwnerType ownerType);

	/**
	 * 更改密码(无验证）
	 * 
	 * @param userId
	 *            用户ID
	 * @param newPwd
	 *            新密码
	 */
	void changePwd(String userId, String newPwd, OwnerType ownerType);

	/**
	 * 删除用户（仅供内部调用）
	 * 
	 * @param userId
	 *            用户ID
	 */
	void deleteAccount(String userId);

	/**
	 * 启用用户
	 * 
	 * @param userId
	 *            用户ID
	 */
	void enableUser(String userId);

	/**
	 * 禁用用户
	 * 
	 * @param userId
	 *            用户ID
	 */
	void disableUser(String userId);

	/**
	 * 修改用户账号
	 * 
	 * @param userId
	 *            用户ID
	 * @param username
	 *            用户账号
	 */
	void modifyUsername(String userId, String username);

	/**
	 * 查询大运营平台下用户信息
	 */
	List<User> searchUser(String userInfo, String roleId);

	/**
	 * 查询集团下用户信息
	 */
	List<User> searchGroupUser(String userInfo,String groupId);

	/**
	 * 获取商圈下的用户列表
	 */
	List<User> busdIdlistUser(String busdId, String username);

	/**
	 * 根据商户手机查询用户账户是否存在（修改）
	 * 
	 * @param contactMobile
	 */
	List<User> fileList(String contactMobile);

	/**
	 * 根据商户手机查询用户账户是否存在（新增）
	 * 
	 * @param contactMobile
	 */
	Long countUser(String contactMobile);

	/**
	 * 用户登录
	 */
	User login(User user, String password);

	/**
	 * 悦商管员工版忘记密码登录
	 * 
	 * @param mobile
	 * @param code
	 * @param password
	 */
	void loginByCode(String mobile, String code, String password);

	/**
	 * 悦商管员工版个人中心
	 */
	User getPersonalInfo();

	/**
	 * 商户分组分配的人员
	 * 
	 * @param groupId
	 */
	User getUserByGroupId(String groupId);

	/**
	 * 查询角色下用户信息
	 */
	List<User> roleUser(String roleId);

	/**
	 * 根据用户名查询商户用户
	 * 
	 * @param username
	 * @return
	 */
	User getMerchantUserByUsername(String username);

	/**
	 * 根据手机号查询商户用户
	 * 
	 * @param mobile
	 * @return
	 */
	User getMerchantUserByMobile(String mobile);

	/**
	 * 根据用户名查询集团用户
	 * 
	 * @param username
	 * @return
	 */
	User getGroupUserByUsername(String username);

	/**
	 * 根据手机号查询集团用户
	 * 
	 * @param mobile
	 * @return
	 */
	User getGroupUserByMobile(String mobile);

	/**
	 * 根据用户名查询大运营用户
	 * 
	 * @param username
	 * @return
	 */
	User getPlatformUserByUsername(String username);

	/**
	 * 根据手机号查询大运营用户
	 * 
	 * @param mobile
	 * @return
	 */
	User getPlatformUserByMobile(String mobile);

}